package com.example.servlet;

import com.example.util.HttpUtil;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 显示最后访问demo04的事件
 */
@WebServlet(name = "demo04", value = "/demo04")
public class ServletDemo04 extends HttpServlet {

    protected void doGet(HttpServletRequest req,
                         HttpServletResponse resp)
            throws ServletException, IOException {
        final String lastAccessTimeKey = "lastAccessTime";
        // 收取客户端请求头当中的Cookie数据
        Cookie[] cookies = req.getCookies(); // 有没有可能是null
        // 遍历
        // 是否存在lastAccessTime一个Cookie
        boolean flag = false;
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                System.out.println(cookie.getName()
                        + " : " + cookie.getValue());
                if (cookie.getName().equals(lastAccessTimeKey)) {
                    // 不是第一次请求，已携带最后访问时间
                    flag = true;
                    // 把旧的Cookie数据取出来，放到页面响应的结果中
                    String old_time = cookie.getValue();
                    old_time = URLDecoder
                            .decode(old_time,
                                    StandardCharsets.UTF_8);
                    // 更新最后一次访问时间
                    Date date = new Date();
                    // 转换字符串
                    String time = new
                            SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                            .format(date);
                    String code = URLEncoder.encode(time,
                            StandardCharsets.UTF_8);
                    cookie.setValue(code);
                    resp.addCookie(cookie);
                    HttpUtil.writeHtml(resp,
                            "<p>最后访问时间：" + old_time + "</p>");
                }
            }
        }
        if (!flag) {
            // 首次访问，返回一个新的Cookie(最后访问时间)
            Date date = new Date();
            // 转换字符串
            String time = new
                    SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                    .format(date);
            String code = URLEncoder.encode(time,
                    StandardCharsets.UTF_8);
            Cookie cookie = new Cookie(lastAccessTimeKey, code);
            resp.addCookie(cookie);
            HttpUtil.writeHtml(resp, "<p>您还没有访问过demo04，下次访问将显示最后访问时间</p>");
        }
    }
}
